﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;

namespace FrameEngine
{
    /// <summary>
    /// 基础工具
    /// </summary>
    public abstract class BaseTool : BaseCommand, ITool
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="pApplication"></param>
        public BaseTool(IApplication pApplication, string pName)
            : base(pApplication, pName)
        {
        }


        public BaseTool(IApplication pApplication)
            : base(pApplication)
        {
        }


        #region ITool Members

        /// <summary>
        /// 鼠标样式
        /// </summary>
        public Cursor Cursor { get; set; }


        /// <summary>
        /// 选中时执行的函数
        /// </summary>
        public virtual void Select()
        {
            //有时会不经过click直接切换工具 所以必须在这里设置一下ckecked用来同步
          
            IsChecked = true;
            Application.GlobeControl.Cursor = Cursor;
        }


        /// <summary>
        /// 不选中时执行的函数
        /// </summary>
        public virtual void UnSelect()
        {
            //有时会不经过click直接切换工具 所以必须在这里设置一下ckecked用来同步
            
            IsChecked = false;
            Application.GlobeControl.Cursor = Cursors.Arrow;
        }


        /// <summary>
        /// 设置系统当前工具为自己
        /// </summary>
        public override void OnClick()
        {
            //如果当前系统处于不可切换工具状态
            if (!Application.IsCanChangeTool)
            {
                //而用户又点击了该工具，设置选中状态即可（因为该工具就是不可切换的，正是因为该工具是不可以切换的，才导致当前系统处于不可切换工具状态）
                if (Application.CurrentTool.CommandName == this.CommandName)
                {
                    IsChecked = true;
                }
                //如果用户点击了该工具，而当前又是工具的不可切换状态，设置该工具的选中状态为False，不进行切换
                else
                {
                    IsChecked = false;
                }
            }
            else
            {
                //系统处于可切换工具状态，系统的当前工具又是本工具，执行反选，系统工具切换为自由浏览
                if (Application.CurrentTool.CommandName == this.CommandName)
                {
                    Application.CurrentTool = Application.PanTool;
                }
                //系统处于可切换工具状态，系统的当前工具不是本工具，切换
                else
                {
                    Application.CurrentTool = this;
                }
            }
        }


        /// <summary>
        /// 鼠标在地球上按下时执行的函数
        /// </summary>
        /// <param name="e"></param>
        public virtual void MouseDown(MouseEventArgs e)
        {
        }

        /// <summary>
        /// 鼠标在地球上移动时执行的函数
        /// </summary>
        /// <param name="e"></param>
        public virtual void MouseMove(MouseEventArgs e)
        {
        }

        /// <summary>
        /// 鼠标在地球上弹起时 执行的函数
        /// </summary>
        /// <param name="e"></param>
        public virtual void MoudeUp(MouseEventArgs e)
        {
        }


        /// <summary>
        /// 鼠标在地球上双击时执行的函数
        /// </summary>
        /// <param name="e"></param>
        public virtual void MouseDoubleClick(MouseEventArgs e)
        {
        }

        #endregion
    }
}
